home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #3 / Amiga Plus CD - 2002 - No. 03.iso / AmiSoft / Dev / Gui / Cit.lha / CIT / citra / CITGadget.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-02-13  |  5.5 KB  |  203 lines

  1. //
  2. //                    CITGadget include
  3. //
  4. //                          StormC
  5. //
  6. //                     version 2003.02.13
  7. //
  8.  
  9. #ifndef CITGADGET_H
  10. #define CITGADGET_H TRUE
  11.  
  12. #include <intuition/gadgetclass.h>
  13. #include <gadgets/layout.h>
  14. #include <images/label.h>
  15.  
  16. #include "CITRootClass.h"
  17.  
  18. //
  19. // These three enums are for internal use
  20. //
  21. enum
  22. {
  23.   CITGADGET_ID = 0,
  24.   CITGADGET_POSITION_X,
  25.   CITGADGET_POSITION_Y,
  26.   CITGADGET_WIDTH,
  27.   CITGADGET_HEIGHT,
  28.   CITGADGET_DISABLED,
  29.   CITGADGET_SELECTED,
  30.   CITGADGET_TEXT,
  31.   CITGADGET_RELVERIFY,
  32.   CITGADGET_FOLLOWMOUSE,
  33.   CITGADGET_TABCYCLE,
  34.   CITGADGET_GADGETHELP,
  35.   CITGADGET_READONLY,
  36.   CITGADGET_UNDERSCORE,
  37.   CITGADGET_TEXTATTR,
  38.   CITGADGET_LAST
  39. };
  40.  
  41. enum
  42. {
  43.   CITGADLABEL_FONT,
  44.   CITGADLABEL_FOREGROUNDPEN,
  45.   CITGADLABEL_BACKGROUNDPEN,
  46.   CITGADLABEL_MODE,
  47.   CITGADLABEL_SOFTSTYLE,
  48.   CITGADLABEL_JUSTIFICATION,
  49.   CITGADLABEL_TEXT,
  50.   CITGADLABEL_LAST
  51. };
  52.  
  53. enum
  54. {
  55.   CITGADCHILD_MINWIDTH,
  56.   CITGADCHILD_MINHEIGHT,
  57.   CITGADCHILD_MAXWIDTH,
  58.   CITGADCHILD_MAXHEIGHT,
  59.   CITGADCHILD_NOMINALSIZE,
  60.   CITGADCHILD_WEIGHTEDWIDTH,
  61.   CITGADCHILD_WEIGHTEDHEIGHT,
  62.   CITGADCHILD_WEIGHTMINIMUM,
  63.   //CITGADCHILD_SCALEDWIDTH,
  64.   //CITGADCHILD_SCALEDHEIGHT,
  65.   CITGADCHILD_LAST
  66. };
  67.  
  68.  
  69. class CITGadget:public CITRootClass
  70. {
  71.   public:
  72.     CITGadget();
  73.     ~CITGadget();
  74.  
  75.     virtual void Refresh();
  76.     
  77.     void Position(int x,int y);
  78.     void Size(int w, int h);
  79.     void Font(char *Name, int Height, int Width = 0);
  80.     void Disabled(BOOL b = TRUE)
  81.       {setGadgetTag(CITGADGET_DISABLED,GA_Disabled,b);}
  82.     void Selected(BOOL b = TRUE)
  83.       {setGadgetTag(CITGADGET_SELECTED,GA_Selected,b);}
  84.     void Activate();
  85.     void Text(char* t)
  86.       {setGadgetTag(CITGADGET_TEXT,GA_Text,ULONG(t));}
  87.     void RelVerify(BOOL b = TRUE)
  88.       {setGadgetTag(CITGADGET_RELVERIFY,GA_RelVerify,b);}
  89.     void FollowMouse(BOOL b = TRUE)
  90.       {setGadgetTag(CITGADGET_FOLLOWMOUSE,GA_FollowMouse,b);}
  91.     void TabCycle(BOOL b = TRUE)
  92.       {setGadgetTag(CITGADGET_TABCYCLE,GA_TabCycle,b);}
  93.     void GadgetHelp(BOOL b = TRUE)
  94.       {setGadgetTag(CITGADGET_GADGETHELP,GA_GadgetHelp,b);}
  95.     void ReadOnly(BOOL b = TRUE)
  96.       {setGadgetTag(CITGADGET_READONLY,GA_ReadOnly,b);}
  97.     void Underscore(char c)
  98.       {setGadgetTag(CITGADGET_UNDERSCORE,GA_Underscore,c);}
  99.  
  100.     void MinWidth(ULONG w)
  101.       {setChildTag(CITGADCHILD_MINWIDTH,CHILD_MinWidth,w);}
  102.     void MinHeight(ULONG h)
  103.       {setChildTag(CITGADCHILD_MINHEIGHT,CHILD_MinHeight,h);}
  104.     void MaxWidth(ULONG w)
  105.       {setChildTag(CITGADCHILD_MAXWIDTH,CHILD_MaxWidth,w);}
  106.     void MaxHeight(ULONG h)
  107.       {setChildTag(CITGADCHILD_MAXHEIGHT,CHILD_MaxHeight,h);}
  108.     void NominalSize(BOOL b = TRUE)
  109.       {setChildTag(CITGADCHILD_NOMINALSIZE,CHILD_NominalSize,b);}
  110.     void WeightedWidth(ULONG w)
  111.       {setChildTag(CITGADCHILD_WEIGHTEDWIDTH,CHILD_WeightedWidth,w);}
  112.     void WeightedHeight(ULONG h)
  113.       {setChildTag(CITGADCHILD_WEIGHTEDHEIGHT,CHILD_WeightedHeight,h);}
  114.     void WeightMinimum(BOOL b = TRUE)
  115.       {setChildTag(CITGADCHILD_WEIGHTMINIMUM,CHILD_WeightMinimum,b);}
  116.     //void ScaledWidth(UWORD w)
  117.     //  {setChildTag(CITGADCHILD_SCALEDWIDTH,CHILD_ScaledWidth,w);}
  118.     //void ScaledHeight(UWORD h)
  119.     //  {setChildTag(CITGADCHILD_SCALEDHEIGHT,CHILD_ScaledHeight,h);}
  120.  
  121.     void LabelFont(struct TextAttr* attr)
  122.       {setLabelTag(CITGADLABEL_FONT,IA_Font,ULONG(attr));}
  123.     void LabelForegroundPen(LONG pen)
  124.       {setLabelTag(CITGADLABEL_FOREGROUNDPEN,IA_FGPen,pen);}
  125.     void LabelBackgroundPen(LONG pen)
  126.       {setLabelTag(CITGADLABEL_BACKGROUNDPEN,IA_BGPen,pen);}
  127.     void LabelMode(UBYTE mode);
  128.     void LabelSoftStyle(UBYTE style)
  129.       {setLabelTag(CITGADLABEL_SOFTSTYLE,LABEL_SoftStyle,style);}
  130.     void LabelJustification(UWORD pos)
  131.       {setLabelTag(CITGADLABEL_JUSTIFICATION,LABEL_Justification,pos);}
  132.     void LabelText(char* text)
  133.       {setLabelTag(CITGADLABEL_TEXT,LABEL_Text,ULONG(text));}
  134.     void Id(ULONG GadgetID);
  135.  
  136.     short width();
  137.     short height();
  138.     short leftEdge();
  139.     short topEdge();
  140.  
  141.     void CallbackHook(ULONG (*p)(APTR,APTR,ULONG),ULONG userData);
  142.     void CallbackHook(void *that, void *p,ULONG userData);
  143.     
  144.     virtual void EventHandler(void (*p)(ULONG Id,ULONG eventType),ULONG eventMask=IDCMP_GADGETUP);
  145.     virtual void EventHandler(void *that,void *p,ULONG eventMask=IDCMP_GADGETUP);
  146.  
  147.   protected:
  148.     virtual BOOL Create(CITWindow* CITWd,CITContainer* parent);
  149.     virtual void Delete();
  150.     virtual Object* NewObjectA(TagItem* tags);
  151.  
  152.     virtual void HandleEvent(UWORD id,ULONG eventType,UWORD code);
  153.     virtual void GadgetEvent(UWORD id,ULONG eventType,UWORD code);
  154.  
  155.     virtual ULONG hookEntry(struct Hook* inputHook,APTR object,APTR msg);
  156.     virtual void  hookSetup(ULONG userData);
  157.     
  158.     struct Hook* createHook(ULONG userData);
  159.  
  160.     void *eventThat;
  161.     union
  162.     {
  163.       void (*Proc0)(ULONG Id,ULONG eventFlag);
  164.       void (*Proc1)(void* that,ULONG Id,ULONG eventFlag);
  165.     } event;
  166.  
  167.     void *callbackThat;
  168.     union
  169.     {
  170.       ULONG (*proc0)(APTR,APTR,ULONG);
  171.       ULONG (*proc1)(void* that,APTR,APTR,ULONG);
  172.     } callback;
  173.  
  174.     ULONG   gadgetID;
  175.     
  176.   private:
  177.     friend ULONG cppHookEntry(struct CITGadgetHook*,APTR,APTR);
  178.  
  179.     void setGadgetTag(int index,ULONG attr,ULONG val);
  180.     void setChildTag(int index,ULONG attr,ULONG val);
  181.     void setLabelTag(int index,ULONG attr,ULONG val);
  182.     void SetUp();
  183.     void CleanUp();
  184.  
  185.     struct Hook* hook;
  186.  
  187.     TagItem* gadgetTag;
  188.     TagItem* labelTag;
  189.     TagItem* childTag;
  190. };
  191.  
  192. typedef ULONG (*CALLBACKHOOK)(APTR,APTR,ULONG);
  193.  
  194. enum
  195. {
  196.   CONTAINED_IN_PAGE_BIT = ROOTCLASS_FLAGBITUSED,
  197.   GADGETCLASS_FLAGBITUSED
  198. };
  199.  
  200. #define CONTAINED_IN_PAGE (1<<CONTAINED_IN_PAGE_BIT)
  201.  
  202. #endif
  203.